package com.xhj.mybatis.session;

import java.sql.Connection;

/**
 * SqlSessionFactory
 *
 * @author XJks
 * @description SqlSessionFactory 接口用于创建 SqlSession 实例，SqlSession 是 MyBatis 执行 SQL、管理事务等的主要对象。该接口定义了多种创建 SqlSession 的方法，可以根据不同需求（如自动提交、事务隔离级别、执行器类型等）来获取 SqlSession。
 */
public interface SqlSessionFactory {

    /**
     * 创建一个默认的 SqlSession 实例。
     * 通常用于简单的数据库操作，使用默认配置。
     *
     * @return SqlSession 实例
     */
    SqlSession openSession();

    /**
     * 创建一个 SqlSession 实例，并指定是否自动提交事务。
     *
     * @param autoCommit 是否自动提交事务，true 表示每次操作后自动提交
     * @return SqlSession 实例
     */
    SqlSession openSession(boolean autoCommit);

    /**
     * 通过已有的数据库连接创建 SqlSession 实例。
     * 适用于需要自定义连接管理的场景。
     *
     * @param connection 已有的 JDBC Connection 对象
     * @return SqlSession 实例
     */
    SqlSession openSession(Connection connection);

    /**
     * 创建一个指定事务隔离级别的 SqlSession 实例。
     * 可以控制事务的并发行为。
     *
     * @param level 事务隔离级别
     * @return SqlSession 实例
     */
    SqlSession openSession(TransactionIsolationLevel level);
}